package edu.javeriana.aes.psw.mensaje;

import edu.javeriana.aes.psw.util.NetworkUtil;

/**
 *
 * @author gersua
 */
public class MensajeBean implements Mensaje {

    private String ip;
    private String alias;
    private double temperatura;
    private long timestamp;
    private int frecuencia;

    public MensajeBean(double temperatura, int frecuencia) {
        this.temperatura = temperatura;
        this.frecuencia = frecuencia;
    }

    public MensajeBean(String ip, String alias, double temperatura, long timestamp, int frecuencia) {
        this.ip = ip != null ? ip : NetworkUtil.obtenerIP();
        this.alias = nombreAlias();
        this.temperatura = temperatura;
        this.timestamp = timestamp;
        this.frecuencia = frecuencia;
    }

    private String nombreAlias() {
        StringBuilder sb = new StringBuilder(NetworkUtil.obtenerNombre());

        if (sb.length() < 20) {
            int diferencia = 20 - sb.length();
            for (int i = 0; i < diferencia; i++) {
                sb.append(" ");
            }
        } else if (sb.length() > 20) {
            int diferencia = sb.length() - 20;
            sb.delete(20, 21 + diferencia);
        }

        return sb.toString();
    }

    @Override
    public String getIp() {
        return ip;
    }

    @Override
    public String getAlias() {
        return alias;
    }

    @Override
    public double getTemperatura() {
        return temperatura;
    }

    @Override
    public long getTimestamp() {
        return timestamp;
    }

    @Override
    public int getFrecuencia() {
        return frecuencia;
    }

    @Override
    public int compareTo(Mensaje mensaje) {
        if (mensaje == null) {
            return 1;
        }
        return ip.compareTo(mensaje.getIp());
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final MensajeBean other = (MensajeBean) obj;
        if ((this.ip == null) ? (other.ip != null) : !this.ip.equals(other.ip)) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 29 * hash + (this.ip != null ? this.ip.hashCode() : 0);
        return hash;
    }
}
